// utils/auth.js
// 全局认证工具 - 处理Token校验和登录状态管理

window.auth = {
    /**
     * 获取当前存储的Token
     * @returns {string|null} Token字符串或null
     */
    getToken: function() {
        return localStorage.getItem('token') || sessionStorage.getItem('token');
    },
    
    /**
     * 清除本地存储的Token
     */
    clearToken: function() {
        localStorage.removeItem('token');
        sessionStorage.removeItem('token');
    },
    
    /**
     * 本地校验Token有效性（基于JWT过期时间）
     * @returns {boolean} Token是否有效
     */
    isTokenValid: function() {
        const token = this.getToken();
        if (!token) return false;
        
        try {
            // 解析JWT的payload部分（不验证签名）
            const payload = JSON.parse(atob(token.split('.')[1]));
            const currentTime = Math.floor(Date.now() / 1000); // 当前时间戳（秒）
            
            // 检查Token是否过期（JWT的exp字段为过期时间戳）
            return payload.exp && payload.exp > currentTime;
        } catch (error) {
            console.error('Token解析失败:', error);
            return false;
        }
    },
    
    /**
     * 处理未登录状态
     * @param {string} message - 提示消息
     */
    handleLogout: function(message = '请先登录') {
        // this.clearToken();
        
        // 使用LayUI的layer模块提示（替代popup）
        layui.use('layer', function() {
            const layer = layui.layer;
            layer.msg(message, {
                icon: 2,
                time: 2000
            }, function() {
                location.href = 'login.html';
            });
        });
    },
    
    /**
     * 同步校验登录状态（用于页面初始化）
     * @returns {boolean} 是否登录
     */
    checkLogin: function() {
        if (!this.isTokenValid()) {
            this.handleLogout();
            return false;
        }
        return true;
    },
    
    /**
     * 异步校验登录状态（通过后端接口验证）
     * @param {function} callback - 回调函数，参数为是否登录
     */
    checkLoginAsync: function(callback) {
        const token = this.getToken();
        if (!token) {
            callback(false);
            return;
        }
        
        // 访问一个受保护的轻量级接口来验证Token
        layui.use('jquery', function() {
            const $ = layui.jquery;
            
            $.ajax({
                url: apiConfig.baseUrl + '/check/token/', // 替换为实际的受保护接口
                type: 'GET',
                headers: {
                    'Authorization': `Bearer ${token}`
                },
                success: function(res) {
                    callback(true);
                },
                error: function(xhr) {
                    // 401状态表示Token无效或过期
                    if (xhr.status === 401) {
                        callback(false);
                    } else {
                        // 其他错误也认为校验失败
                        callback(false);
                    }
                }
            });
        });
    },
    
    /**
     * 设置Token
     * @param {string} token - JWT Token
     * @param {boolean} remember - 是否记住登录状态
     */
    setToken: function(token, remember) {
        if (remember) {
            localStorage.setItem('token', token);
            sessionStorage.setItem('token', token);
        } else {
            sessionStorage.setItem('token', token);
            localStorage.setItem('token', token);
        }
    }
};